package com.moli.iov.admin.model.vo.req;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.moli.iov.util.DateUtil;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

/**
 * <p>
 *  告警管理
 * </p>
 *
 * @author zql
 * @since 2019/5/27 14:09
 */
@Slf4j
@Data
public class AlarmVo extends BaseVo {

    private static final long serialVersionUID = 3989157507913532506L;

    /**
     * 车架号
     */
    private String vin;

    /**
     * 车牌号
     */
    private String license;

    /**
     * 唯一 报警编码
     */
    @NotNull(message = "报警id不能为空", groups = {GetAlarmInfo.class, Audit.class, Ignore.class})
    private String alarmId;

    /**
     * 报警编码
     */
    private Integer alarmCode;

    /**
     * 报警编码集合
     */
    private List<Integer> alarmCodes;

    /**
     * 列表类型：1、 风险预防报警列表  2、车载终端报警列表  3、电子围栏报警列表
     */
    private Integer listType;

    /**
     * 报警状态 1、报警中 2、报警结束 3、已忽略
     */
    private Integer status;

    /**
     * 页签类型  0、全部  1、待处理 2 处理中 3已解除
     */
    private Integer tabType;
    /**
     * 故障级别 1、一级报警  2、二级报警  3、三级报警
     */
    private Integer alarmLevel;

    /**
     * 报警时间start
     */
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    private Date beginTime;

    /**
     * 报警时间 end
     */
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    private Date endTime;

    /**
     * 里程异变审核 状态 0、未处理 1、有效变异 2、无效异变
     */
    @NotNull(message = "处理意见不能为空", groups = {Audit.class})
    @Min(value = 1, message = "请选择处理意见", groups = {Audit.class})
    @Max(value = 2, message = "请选择处理意见", groups = {Audit.class})
    private Integer meAuditStatus;

    /**
     * 里程异变审 原因说明
     */
    @NotNull(message = "原因说明不能为空", groups = {Audit.class})
    private String meAuditMemo;

    /**
     * 忽略原因
     */
    @NotNull(message = "原因说明不能为空", groups = {Ignore.class})
    private String ignoreMemo;


    public void setBeginTime(Date beginTime) {
        try {
            if(beginTime == null){
                return;
            }
            String beginStr =
                    DateUtil.format(DateUtil.YEAR_DAY, beginTime) + " 00:00:00";
            this.beginTime = DateUtil.parser(DateUtil.YEAR_SECOND, beginStr);
        } catch (ParseException e) {
            log.error("开始时间 error", e);
        }
    }

    public void setEndTime(Date endTime) {
        try {
            if(endTime == null){
                return;
            }
            String endStr = DateUtil.format(DateUtil.YEAR_DAY, endTime) + " 23:59:59";
            this.endTime = DateUtil.parser(DateUtil.YEAR_SECOND, endStr);
        } catch (ParseException e) {
            log.error("结束时间 error", e);
        }
    }

    public interface GetAlarmInfo{}

    public interface Audit{}

    public interface Ignore{}
}
